import request from '@/utils/request'
import request_upload from '@/utils/request-upload'

/**
 * 初始化分片上传
 * @param {Object} params - 请求参数
 * @param {string} params.originalFilename - 原始文件名
 * @param {string} params.contentType - 文件MIME类型
 * @param {number} params.fileTotalSize - 文件总大小(字节)
 * @param {number} [params.customPartSize] - 自定义分片大小(字节)
 * @returns {Promise} - 返回初始化结果
 */
export function initMultipartUpload(params) {
  return request({
    url: '/minio/multipart/init',
    method: 'post',
    params: params
  })
}

/**
 * 服务端接收分片并上传（非直传模式）
 * @param {FormData} formData - 表单数据
 * @param {string} formData.uploadId - 分片上传ID
 * @param {number} formData.partNumber - 分片序号
 * @param {File} formData.partFile - 分片文件
 * @param {string} formData.partMd5 - 分片MD5值
 * @returns {Promise} - 返回分片上传结果
 */
export function uploadPartByServer(formData) {
  return request_upload({
    url: '/minio/multipart/upload',
    method: 'post',
    data: formData,
    ContentType:'multipart/form-data'
  })
}

/**
 * 查询已上传的分片列表（用于断点续传）
 * @param {Object} params - 请求参数
 * @param {string} params.uploadId - 分片上传ID
 * @returns {Promise} - 返回已上传分片信息
 */
export function listUploadedParts(params) {
  return request({
    url: '/minio/multipart/list',
    method: 'get',
    params: params
  })
}

/**
 * 完成分片上传（合并分片）
 * @param {Object} params - 请求参数
 * @param {string} params.uploadId - 分片上传ID
 * @param {number} params.partCount - 总分片数
 * @param {string} params.originalFilename - 原始文件名
 * @param {number} params.fileTotalSize - 文件总大小(字节)
 * @param {string} params.fileTotalMd5 - 文件整体MD5值
 * @param {string} [params.customDir] - 自定义存储目录
 * @returns {Promise} - 返回合并后的文件信息
 */
export function completeMultipartUpload(params) {
  return request({
    url: '/minio/multipart/complete',
    method: 'post',
    params: params
  })
}

/**
 * 取消分片上传（清理临时文件）
 * @param {Object} params - 请求参数
 * @param {string} params.uploadId - 分片上传ID
 * @param {number} [params.partCount] - 已上传分片数(可选)
 * @returns {Promise} - 返回取消操作结果
 */
export function abortMultipartUpload(params) {
  return request({
    url: '/minio/multipart/abort',
    method: 'post',
    params: params
  })
}
